package com.viettel.pon.common;

import android.widget.EditText;
import java.util.regex.Pattern;
 
public class Validation {
 
    // Regular Expression
    // you can change the expression based on your need
    private static final String VNCHAR = "^([a-zA-Z0-9\\_]+)$";
    private static final String SPECIALCHAR = "/^[^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\+\\=\\<\\>\\?\\-\\/]*$/";
    private static final String DOUBLECHAR = "^[0-9]{1,9}\\.?[0-9]{1,9}$";
    private static final String INTCHAR = "^[0-9]{1,9}$";
    
    // Error Messages
    private static final String REQUIRED_MSG = "Trường bắt buộc nhập";
    private static final String SPECIAL_MSG = "Không được nhập kí tự đặc biệt";
    private static final String DOUBLE_MSG = "Phải là số thực";
    private static final String INT_MSG = "Phải là số nguyên";
    private static final String LENGTH50 = "Chỉ được nhập 50 kí tự";
    private static final String LENGTH10 = "Chỉ được nhập 10 kí tự";
 
    public static boolean isVnChar(EditText editText, boolean required,int maxlength) {
        return isValidText(editText, VNCHAR, SPECIAL_MSG, required,maxlength);
    }
 
    public static boolean isSpecialChar(EditText editText, boolean required,int maxlength) {
        return isValidText(editText, SPECIALCHAR, SPECIAL_MSG, required,maxlength);
    }
    
    public static boolean isDoubleChar(EditText editText, boolean required,int maxlength) {
        return isValid(editText, DOUBLECHAR, DOUBLE_MSG, required,maxlength);
    }
    
    public static boolean isIntChar(EditText editText, boolean required,int maxlength) {
        return isValid(editText, INTCHAR, INT_MSG, required,maxlength);
    }
 
    public static boolean isValid(EditText editText, String regex, String errMsg, boolean required,int maxlength) {
 
        String text = editText.getText().toString().trim();
        editText.setError(null);

        if ( required && !hasText(editText) ) return false;

        if (text.indexOf(".") == -1) {
        	 if (required && !Pattern.matches(INTCHAR, text)) {
                 editText.setError(errMsg);
                 return false;
             };
        } else {
        	  if (required && !Pattern.matches(regex, text)) {
                  editText.setError(errMsg);
                  return false;
              };
        }
        
      
        
        if(required && text.length()>maxlength){
      	  editText.setError(LENGTH10);
            return false;
      }
 
        return true;
    }
    
    public static boolean isValidText(EditText editText, String regex, String errMsg, boolean required,int maxlength) {
    	 
        String text = editText.getText().toString().trim();
        editText.setError(null);

        if ( required && !hasText(editText) ) return false;

        if (required && !Pattern.matches(regex, text)) {
            editText.setError(errMsg);
            return false;
        };
        
        if(required && text.length()>maxlength){
        	  editText.setError(LENGTH50);
              return false;
        }
 
        return true;
    }
 

    public static boolean hasText(EditText editText) {
 
        String text = editText.getText().toString().trim();
        editText.setError(null);
        if (text.length() == 0) {
            editText.setError(REQUIRED_MSG);
            return false;
        }
 
        return true;
    }
}
